package easy;

import java.lang.reflect.Array;

/**
 * @Author YNA-User
 * @CreateDate 2020/3/27 下午 3:31
 * @TODO 给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转。
 *
 * 示例 1:
 *
 * 输入: 123
 * 输出: 321
 *  示例 2:
 *
 * 输入: -123
 * 输出: -321
 * 示例 3:
 *
 * 输入: 120
 * 输出: 21
 * 注意:
 *
 * 假设我们的环境只能存储得下 32 位的有符号整数，则其数值范围为 [−231,  231 − 1]。请根据这个假设，如果反转后整数溢出那么就返回 0。
 *
 */
public class SolutionReverse {

    /**
     *  思路:   1, 将 int 类型转换为 String 类型
     *          2, 截取掉 '-', 反向 for 拼接 num
     *          3, try Integer.parent() 超出 return 0 , 反之根据三目运算 return
     * @param x
     * @return
     */
    public static int reverse1(int x) {
        int maxNumber = 2147483647;
        int minNumber = -2147483648;
        String strX = String.valueOf(x);
        String num = "";
        boolean flag = false;
        if (strX.contains("-")) {
            flag = true;
            strX = strX.replace("-", "");
        }

        for (int i = strX.length() - 1; i >= 0; i--) {
            num += strX.substring(i, i + 1).trim();
        }

        try{
            Integer.parseInt(num);
        } catch (NumberFormatException e) {
            return 0;
        }

        return flag ? (0 - Integer.parseInt(num)):Integer.parseInt(num);
    }


    /**
     *  思路: 1, while( x != 0)
     *          2, 每次循环 取余出最后一位 + n , 然后 / 10 剔除最后一位
     *          3, (int) n == n 成立 return (int) n, 反之 return 0
     * @param x
     * @return
     */
    public static int reverse(int x) {
        long n = 0;
        while (x != 0) {
            n = n * 10 + x % 10;
            x = x / 10;
        }
        return (int) n == n ? (int) n : 0;
    }
}
